package com.tsj.spzx.Utils;

import com.tsj.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

// 将传来的菜单利用递归方法找到他的所有子菜单，封装为符合前端要求的List列表
public class MenuTreeListUtil {

    // 1、先找到所有根菜单作为入口，根菜单就是也就是parentId为0的菜单
    public static List<SysMenu> buildTreeList(List<SysMenu> sysMenuList) {
        // 最后要返回一个list集合
        List<SysMenu> treeMenuList = new ArrayList<>();

        for (SysMenu sysMenu : sysMenuList) {
            // 如果parentId为0，则表示他是根节点
            if (sysMenu.getParentId() == 0){
                // 那就去寻找他的子菜单
                treeMenuList.add(getChildren(sysMenu, sysMenuList));
            }
        }
        return treeMenuList;
    }

    private static SysMenu getChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        // SysMenu的children属性是一个List集合，所以需要先初始化一下
        sysMenu.setChildren(new ArrayList<>());

        // 根节点作为入口，遍历所有菜单，如果parentId等于根节点的id，则表示该菜单是根节点的子菜单
        for (SysMenu menu : sysMenuList) {
            if(menu.getParentId().equals(sysMenu.getId())){
                // 说明他是sysMenu的子节点
                // 在这里采用递归的目的是，可能层级有很多层，所以需要递归，如果直接添加，那么就只能找到1、2层
                sysMenu.getChildren().add(getChildren(menu, sysMenuList));
            }
        }
        return sysMenu;
    }
}
